import axios from 'axios'
import service from './Apis'
import { Toast } from 'vant';
//import router from "../router"
// service 循环遍历输出不同的请求方法
// let instance = axios.create({
//     baseURL: ''
// })
// 包裹请求方法的容器

// 设置基础URL
//axios.defaults.baseURL = 'http://192.168.43.66:8080/book/'
axios.defaults.baseURL = 'http://www.bjtang.com:8001/book/'
// 设置请求超时时间
axios.defaults.timeout = 10000
// 设置跨域相关
axios.defaults.withCredentials = true;

const Http = {}

// 请求格式/参数的统一
for (let key in service) {
    let api = service[key];
    // method
    // 避免进入回调地狱
    Http[key] = async function (
        params, //请求参数
        isFormData = false,  //是否是form-data请求
        config = {}   //配置参数
    ) {
        // let url = api.url
        let newParams = {}
        if (params && isFormData) {
            newParams = new FormData()
            for (let i in params) {
                newParams.append(i, params[i])
            }
        } else {
            newParams = params
        }
        let response = {}   // 请求的返回值
        // 不同请求的判断
        if (api.method === 'put' || api.method === 'post' || api.method === 'patch') {
            try {
                response = await axios[api.method](api.url, newParams, config)
            } catch (err) {
                response = err
            }
            //delete请求
        } else if (api.method === 'delete') {
            //config.params = newParams
            // delete只有两个参数,一个url,一个config 没有params   ,params存放在 config.data里,所以应该用以下赋值方式
            config.data = newParams
            try {
                response = await axios[api.method](api.url, config)
            } catch (err) {
                response = err
            }
        } else {
            // get 需要把参数拼接到url后面
            let url = null;
            if (newParams != undefined || newParams != null)
                url = api.url + newParams
            else
                url = api.url
            // config.data = newParams
            try {
                response = await axios[api.method](url, config)
            } catch (err) {
                response = err
            }
        }
        return response
    }
}

// 拦截器的添加
// 请求拦截器
axios.interceptors.request.use(config => {
    // 发起请求前做些什么
    // Message('正在请求');
    return config
}, err => {
    // 请求错误
    Toast('请求错误');
    window.console.log(err)
})

// 响应拦截器
axios.interceptors.response.use(res => {
    if (res.data.meta.status == 200) {
        window.console.log(res.data.meta.status);
        window.console.log(res.data.meta.msg);
        window.console.log(res.data.data);
        return res.data
    }
    else {
        Toast(res.data.meta.msg + " " + res.data.meta.status + " " + res.data.data);
        window.console.log(res.data.meta.status);
        window.console.log(res.data.meta.msg);
        window.console.log(res.data.data);
        //if (res.data.meta.status == 401)
        //    router.push("/login");
        // Message('请求错误');
    }
}, err => {
    Toast('请求错误');
    window.console.log(err)
})

export default Http